<?php

/**
 *                  ********************
 *    ************ PROJEKTEK ADMIN CONTROLLER ************
 *                  ********************
 * 
 * 
 */
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Projektek extends Admin_Controller {

    function __construct() {
        // Call the Model constructor
        parent::__construct();
        $this->load->model("projekt_model");
    }

    /**
     * 
     * Index Page for admin
     * 
     * 
     */
    public function index() {
        $this->projekt_list();
    }

    public function projekt_list() {
        $this->data['title'] = "Összes projekt";
        $this->data['dtables'] = array(
            'ajax_source_site_url' => 'admin/projektek/ajax_get_table',
            'table_name' => 'projekt_table',
            'table_fields' => array(
                'projekt_id',
                'projekt_nev',
                'jelenleg_fut_flag',
                'kiemelt_flag',
                'projekt_leiras'
            ),
            'edit_site_url' => 'admin/projektek/edit_projekt',
            'ajax_delete_site_url' => 'admin/projektek/ajax_delete_projekt',
        );
        $this->_load_view('admin/projektek/projekt_list_view');
    }

    public function edit_projekt($id) {
        $this->data['title'] = "Projekt szerkesztése";
        if (!isset($id)) {
            $this->session->set_flashdata('error_message', 'A szerkesztéshez id-t kell megadni.');
            redirect('admin/projektek');
        }
        $this->data['projekt_data'] = $this->projekt_model->get_projekt($id);
        $this->_load_view('admin/projektek/projekt_edit_view');
    }

    public function new_projekt() {
        $this->data['title'] = "projekt szerkesztése";
        $this->_load_view('admin/projektek/projekt_edit_view');
    }

    public function add_projekt() {
        $this->form_validation->set_rules('kiemelt_flag', '', '');
        $this->form_validation->set_rules('jelenleg_fut_flag', '', '');
        $this->form_validation->set_rules('kiemelt_kep_url', '', '');
        $this->form_validation->set_rules('projekt_kep_url', '', '');
        $this->form_validation->set_rules('projekt_nev', '', 'trim|requed');
        $this->form_validation->set_rules('projekt_leiras', '', '');
        // set error delimiters
        $this->form_validation->set_error_delimiters('', '');
        if ($this->form_validation->run() == FALSE) {
            $this->new_projekt();
            return;
        }
        // átjutunk az ellenőrzésen akkor lementjük az adatokat
        $projekt_data = $this->input->post();

        // beletesszük a projekt cim slug-ot
        // string helper kell az inkrementáláshoz
        $this->load->helper('string');
        // addig inkrementáljuk, amíg már nem létezik az adatbázisban ilyen slug.
        $projekt_data['projekt_nev_slug'] = _generate_slug($projekt_data['projekt_nev']);
        // ha már van ilyen név inkrementálunk
        while ($this->projekt_model->get_projekt_by_slug($projekt_data['projekt_nev_slug']) != NULL) {
            $projekt_data['projekt_nev_slug'] = increment_string($projekt_data['projekt_nev_slug']);
        }

        // elmentjük
        $this->projekt_model->add_projekt($projekt_data);
        // legközelebb találkozunk, most lista.
        $this->session->set_flashdata('message', 'Az új projekt: ' .
                $projekt_data["projekt_nev"] . ' sikeresen bekerült az adatbázisba.');
        redirect('admin/projektek');
    }

    public function update_projekt($id) {
        if (!isset($id)) {
            $this->session->set_flashdata('error_message', 'A szerkesztéshez id-t kell megadni.');
            redirect('admin/projektek');
        }
        $this->form_validation->set_rules('kiemelt_flag', '', '');
        $this->form_validation->set_rules('jelenleg_fut_flag', '', '');
        $this->form_validation->set_rules('kiemelt_kep_url', '', '');
        $this->form_validation->set_rules('projekt_kep_url', '', '');
        $this->form_validation->set_rules('projekt_nev', '', 'trim|requed');
        $this->form_validation->set_rules('projekt_leiras', '', '');
        // set error delimiters
        $this->form_validation->set_error_delimiters('', '');
        if ($this->form_validation->run() == FALSE) {
            $this->edit_projekt($id);
            return;
        }
        // átjutunk az ellenőrzésen akkor lementjük az adatokat
        $projekt_data = $this->input->post();

        // beletesszük a projekt cim slug-ot
        // string helper kell az inkrementáláshoz
        $this->load->helper('string');
        // addig inkrementáljuk, amíg már nem létezik az adatbázisban ilyen slug.
        $projekt_data['projekt_nev_slug'] = _generate_slug($projekt_data['projekt_nev']);
        // ha már van ilyen név inkrementálunk
        while ($this->projekt_model->get_projekt_by_slug($projekt_data['projekt_nev_slug'], $id) != NULL) {
            $projekt_data['projekt_nev_slug'] = increment_string($projekt_data['projekt_nev_slug']);
        }

        // beletesszük az id-t
        $projekt_data['projekt_id'] = $id;

        // elmentjük
        $this->projekt_model->update_projekt($projekt_data);
        // legközelebb találkozunk, most lista.
        $this->session->set_flashdata('message', 'A projekt: ' .
                $projekt_data["projekt_nev"] . ' adatai sikeresen módusultak.');
        redirect('admin/projektek');
    }

    /**
     *  projekt törlése
     * 
     * @param type $id
     * @return type 
     */
    public function ajax_delete_projekt($id) {
        try {
            $this->projekt_model->delete($id);
        } catch (Exception $e) {
            echo encode_json($e->getMessage());
            return;
        }
        echo encode_json("successful");
    }

    /**
     * Datatables-hez
     */
    public function ajax_get_table() {
        /**
         * Ami bejön és fontos:
         * iDisplayStart
         * iDisplayLength
         * sSearch
         * sEcho    _ XSS protection
         * 
         * 
         * Ami kimegy:
         * 
         * iTotalRecords
         * iTotalDisplayRecords
         * sEcho
         * aaData
         */
        // elkérjük az összes postolt adatot
        $all_post = $this->input->post();

        // text helper kelleni fog
        $this->load->helper('text');

        //var_dump($all_post);
        // megnézzük mennyi column van a táblázatban
        $number_of_columns = $all_post['iColumns'];

        // megnézzük kell-e keresni valamire
        ($all_post['sSearch'] != '') ? $search_like = $all_post['sSearch'] : $search_like = NULL;

        // csinálunk egy listát a megjelítendő változókról
        // azaz adatbázisból az oszlopokról
        $select_from_database = "";
        for ($i = 0; $i < $number_of_columns; $i++) {
            $select_from_database .= $all_post["mDataProp_$i"];
            //a vesszőt az utolsóig hozzáadja, mivel ez felsorolás
            if ($i < $number_of_columns - 1)
                $select_from_database.=", ";
        }

        // SORBARENDEZÉS IMPLEMENTÁLÁSA
        // megszerezzük mi szerint kell sortolnunk
        $sort_by_id = $all_post["iSortCol_0"];
        // így megkapjuk a nevét
        $order_by = $all_post["mDataProp_$sort_by_id"];
        // és most hozzáadjuk az irányt
        $order_dir = $all_post["sSortDir_0"];

        // összeállítjuk a lekérést, amit a modelnek küldünk.
        $projektek_request = array(
            // keresés
            'search_like' => $search_like,
            // kiválasztás
            'select' => $select_from_database,
            // limit&offset
            'limit' => $all_post['iDisplayLength'],
            'offset' => $all_post['iDisplayStart'],
            'order_by' => $order_by,
            'order_dir' => $order_dir
        );

        $projektek = $this->projekt_model->get_projektek($projektek_request);

        foreach ($projektek as $projekt) {
            $projekt->DT_RowId = "projekt_id_" . $projekt->projekt_id;

            // jelenleg fut human readable
            if ($projekt->jelenleg_fut_flag == '0') {
                $projekt->jelenleg_fut_flag = 'nem';
            } else {
                $projekt->jelenleg_fut_flag = 'igen';
            }

            // kiemelt flag human readable
            if ($projekt->kiemelt_flag == '0') {
                $projekt->kiemelt_flag = 'nem';
            } else {
                $projekt->kiemelt_flag = 'igen';
            }
            
            // ez ki is szedi a képet a leírásból
            $projekt->projekt_leiras = character_limiter($projekt->projekt_leiras, 30);
        }

        $data["iTotalRecords"] = $this->projekt_model->count();
        $data["iTotalDisplayRecords"] = $data["iTotalRecords"];
        $data["sEcho"] = $all_post["sEcho"];
        $data["aaData"] = $projektek;

        echo encode_json($data);
    }

}